﻿using Library.Collections.Generic;
using Library.Logic.Inference;
using System.Linq;
using System.Linq.Expressions;
using System;
using TRULE = System.Linq.Expressions.Expression<System.Func<System.Linq.IQueryable<System.Linq.Expressions.Expression>, System.Collections.Generic.IEnumerable<System.Collections.Generic.IEnumerable<System.Linq.Expressions.Expression>>>>;
using TEXPRESSION = System.Linq.Expressions.Expression;

namespace Library.Logic.Inference
{
    public interface IJustification<out TRule, out TExpression>
    {
        System.Collections.Generic.IEnumerable<TExpression> Antecedent { get; }
        TRule Rule { get; }
    }

    public interface IInference<out TRule, out TExpression> : IHasValueReadOnly<System.Collections.Generic.IEnumerable<TExpression>>
    {
        System.Collections.Generic.IEnumerable<IJustification<TRule, IInference<TRule, TExpression>>> Justifications { get; }
    }

    public interface IInference : IInference<TRULE, TEXPRESSION> { }
}